package com.cheng.example.book.advise151.chap7;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * 建议93：Java的泛型是可以擦除的
 *
 * 方法一样，入参一样，就参数泛型不同，不是方法重载，会报异常
 */
public class Client93 {

    //arrayMethod接收数组参数，并进行重载
    public void arrayMethod(String[] intArray) {

    }

    public void arrayMethod(Integer[] intArray) {

    }
    //listMethod接收泛型List参数，并进行重载
    public void listMethod(List<String> stringList) {

    }
//    public void listMethod(List<Integer> intList) {
//
//    }



    /**
     * java泛型是擦除的，上下两块代码是相同的
     * @param args
     */

//    public static void main(String[] args) {

//        List<String> list = new ArrayList<String>();
//        list.add("abc");
//        String str = list.get(0);


//        List list = new ArrayList();
//        list.add("abc");
//        String str = (String) list.get(0);
//    }


    //1、泛型的class对象是相同的：每个类都有一个class属性，泛型化不会改变class属性的返回值，例如：
//    public static void main(String[] args) {
//        List<String> list = new ArrayList<String>();
//        List<Integer> list2 = new ArrayList<Integer>();
//        System.out.println(list.getClass()==list2.getClass());
//    }

    //　2.泛型数组初始化时不能声明泛型，如下代码编译时通不过：　
    //原因很简单，可以声明一个带有泛型参数的数组，但不能初始化该数组，因为执行了类型擦除操作，List<Object>[]与List<String>[] 就是同一回事了，编译器拒绝如此声明。
//    public static void main(String[] args) {
////        List<String>[] listArray = new List<String>[];
//
//    }


//    　3.instanceof不允许存在泛型参数,以下代码不能通过编译，原因一样，泛型类型被擦除了　
//    public static void main(String[] args) {
//        List<String> list = new ArrayList<String>();
//        System.out.println(list instanceof List<String>);
//    }
//





}
